if exists (select 1
          from sysobjects
          where  id = object_id('bd_proc_ot_order_del')
          and type in ('P','PC'))
   drop procedure bd_proc_ot_order_del
go


create procedure bd_proc_ot_order_del (@order_id_str varchar(max),@ip varchar(200),@operator varchar(200),@reason varchar(max)) as
BEGIN

-- 关闭打印受影响行数
SET NOCOUNT ON;


-- 定义返回受影响行数结果
	declare @result int = 0;


	--  异常扑捉机制
		BEGIN TRY
			
			CREATE TABLE #order_id(
				id INT IDENTITY,
				order_id int
			)


		-- 开启事务
			BEGIN TRAN
			
				-- 拆加班单号
				insert into #order_id(order_id)
				select * from string_split(iif(isnull(@order_id_str,'')='','',@order_id_str),',');

				--创建一个游标
				declare my_cursor cursor for select order_id from #order_id      --这是游标my_cursor的值，这里随便发挥看业务场景

				--打开游标
				open my_cursor

					--变量
					declare @order_id varchar(200);

					--循环游标
					fetch next from my_cursor into @order_id  --获取my_cursor的下一条数据，其中为两个字段分别赋值给@id,@name
					while @@FETCH_STATUS=0 begin --假如检索到了数据继续执行

					  EXEC bd_proc_ot_detail_del @order_id, null, @ip, @operator,@reason
				    set @result += @@ROWCOUNT;

					fetch next from my_cursor into @order_id --获取下一条数据并赋值给变量

				end--关闭释放游标
				close my_cursor
				deallocate my_cursor


		--  提交事务
			COMMIT TRAN

	--  结束异常捕捉
		END TRY

	--  异常处理
		BEGIN CATCH
			DECLARE @errStr VARCHAR(MAX) = ERROR_MESSAGE();
			IF XACT_STATE() <> 0
			BEGIN
			  ROLLBACK TRANSACTION;
			  RAISERROR (@errStr, 16, 1);
			END;
		END CATCH


--  清除临时表	
	drop table #order_id;

	select @result as result

-- 打开打印受影响行数
SET NOCOUNT OFF;
END;
go
